# 此脚本用于Linux/Mac环境
# 使用方法: gunicorn -w 4 -b 0.0.0.0:5555 --reload --log-level debug 'run_with_gunicorn:app'
# 通过环境变量控制Gunicorn参数：gunicorn -w $WORKERS -b $GUNICORN_BIND --log-level $LOG_LEVEL 'run_with_gunicorn:app'
# 其中，GUNICORN_BIND和LOG_LEVEL是从Flask配置中获取的
# 通过环境变量指定配置文件路径：
# export MEDIA_SERVICE_CONFIG=./configs/config.json
# gunicorn -w $WORKERS -b $GUNICORN_BIND $RELOAD_FLAG --log-level $LOG_LEVEL 'run_with_gunicorn:app'
# gunicorn 'run_with_gunicorn:app'

import argparse
import atexit
import os

from configs.config import Config
from flask_server import app, deregister_from_nacos, register_to_nacos

# 解析命令行参数
parser = argparse.ArgumentParser(description="媒体信息处理服务")
parser.add_argument(
    "--config",
    type=str,
    help="配置文件路径",
    default=os.environ.get("MEDIA_SERVICE_CONFIG"),
)
args = parser.parse_args()

# 加载配置
config = Config(args.config) if args.config else Config()
# 服务端口
PORT = config.get("service.port", 5555)
HOST = config.get("service.listen_host", "0.0.0.0")
DEBUG = config.get("service.debug", False)

# 从Flask配置获取Gunicorn参数
WORKERS = config.get("service.workers", 4)  # 工作进程数
GUNICORN_BIND = f"{HOST}:{PORT}"  # 绑定地址
LOG_LEVEL = "debug" if DEBUG else "info"  # 日志级别
RELOAD_FLAG = "--reload" if DEBUG else ""  # 是否启用自动重载

# 定义gunicorn应用对象
app = app

# 注册到Nacos
register_to_nacos()

# 注册退出处理函数
atexit.register(deregister_from_nacos)
